package com.zdgk.core.control.forward.modbus;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;

public class FloatToModbus {

    public static int[] floatToModbusRegisters(float value, String byteOrder) {
        // 将浮点数转换为4字节的字节数组
        byte[] bytes = ByteBuffer.allocate(4)
                .putFloat(value)
                .array();

        // 根据字节顺序重新排列字节
        byte[] reordered = new byte[4];
        switch (byteOrder) {
            case "ABCD": // 大端序 (高位在前)
                reordered = new byte[]{bytes[0], bytes[1], bytes[2], bytes[3]};
                break;
            case "CDAB": // 字交换 (低位在前)
                reordered = new byte[]{bytes[2], bytes[3], bytes[0], bytes[1]};
                break;
            case "BADC": // 字节交换 (每个寄存器内部交换)
                reordered = new byte[]{bytes[1], bytes[0], bytes[3], bytes[2]};
                break;
            case "DCBA": // 小端序 (完全反转)
                reordered = new byte[]{bytes[3], bytes[2], bytes[1], bytes[0]};
                break;
            default:
                throw new IllegalArgumentException("不支持的字节顺序: " + byteOrder);
        }

        // 组合成两个16位寄存器
        int reg0 = ((reordered[0] & 0xFF) << 8) | (reordered[1] & 0xFF);
        int reg1 = ((reordered[2] & 0xFF) << 8) | (reordered[3] & 0xFF);

        return new int[]{reg0, reg1};
    }

    public static void main(String[] args) {
        float value = 333.5f;

        // 示例：ABCD顺序 (大端序)
        int[] abcdRegs = floatToModbusRegisters(value, "ABCD");
        System.out.println( abcdRegs[0]+"====="+abcdRegs[1]);
        System.out.printf("ABCD: [0x%04X, 0x%04X]\n", abcdRegs[0], abcdRegs[1]);
    }
}
